/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.sadhar.sipp.rencanapendapatanuangformulirmahasiswabaru;

import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import org.sadhar.errhandler.ClassAntiNull;
import org.sadhar.sia.framework.ClassApplicationModule;
import org.sadhar.sipp.gelombang.Gelombang;
import org.sadhar.sipp.gelombang.GelombangDAO;
import org.sadhar.sipp.gelombang.GelombangDAOImpl;
import org.sadhar.sipp.posanggaranpendapatanunit.PosAnggaranPendapatanUnitDAO;
import org.sadhar.sipp.posanggaranpendapatanunit.PosAnggaranPendapatanUnitDAOImpl;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.event.EventListener;
import org.zkoss.zul.Button;
import org.zkoss.zul.Combobox;
import org.zkoss.zul.Comboitem;
import org.zkoss.zul.Hbox;
import org.zkoss.zul.Label;
import org.zkoss.zul.Listbox;
import org.zkoss.zul.Listcell;
import org.zkoss.zul.Listitem;
import org.zkoss.zul.Messagebox;
import org.zkoss.zul.Toolbarbutton;
import org.zkoss.zul.api.Box;
import org.sadhar.sia.common.ClassSession;
import org.zkoss.zk.ui.Session;
import org.zkoss.zk.ui.Sessions;
import org.zkoss.zul.Doublebox;
import org.zkoss.zul.Intbox;

/**
 * 
 * @author Yohan Hardinugroho
 */
public class RencanaPendapatanUangFormulirMahasiswaBaruWnd extends ClassApplicationModule {

    private Label lblTahunAnggaran;
    private Combobox cmbboxGelombang;
    private Intbox txtboxJumlahFormulir;
    private Doublebox txtboxHargaSatuan;
    private Label lblTotal;
    private Label lblGelombang;
    private Button btnSimpan;
    private Button btnBatal;
    private Listbox lstboxAnggaranPendapatanUnit;
    private Label lblTotalAnggaran;
    private GelombangDAO gelombangDAO;
    private PosAnggaranPendapatanUnitDAO posAnggaranPendapatanUnitDAO;
    private RencanaPendapatanUangFormulirMahasiswaBaruDAO rencanaPendapatanUangFormulirMahasiswaBaruDAO;
    private String tahunAnggaran;
    private String kodeUnit;
    private Boolean isUbah;

    public RencanaPendapatanUangFormulirMahasiswaBaruWnd() {
        gelombangDAO = new GelombangDAOImpl();
        rencanaPendapatanUangFormulirMahasiswaBaruDAO = new RencanaPendapatanUangFormulirMahasiswaBaruDAOImpl();
        posAnggaranPendapatanUnitDAO = new PosAnggaranPendapatanUnitDAOImpl();
    }

    public void onCreate() throws Exception {
        lblTahunAnggaran = (Label) getFellow("lblTahunAnggaran");
        cmbboxGelombang = (Combobox) getFellow("cmbboxGelombang");
        lblGelombang = (Label) getFellow("lblGelombang");
        txtboxJumlahFormulir = (Intbox) getFellow("txtboxJumlahFormulir");
        txtboxHargaSatuan = (Doublebox) getFellow("txtboxHargaSatuan");
        lblTotal = (Label) getFellow("lblTotal");
        btnSimpan = (Button) getFellow("btnSimpan");
        btnBatal = (Button) getFellow("btnBatal");
        lstboxAnggaranPendapatanUnit = (Listbox) getFellow("lstboxAnggaranPendapatanUnit");
        lblTotalAnggaran = (Label) getFellow("lblTotalAnggaran");

        load();
    }

    public void load() {
        loadTahunAnggaran();
        loadCmbboxGelombang();
        loadLstboxAnggaranPendapatanUnit();


        txtboxHargaSatuan.setValue(0);
        txtboxJumlahFormulir.setValue(0);
        lblTotal.setValue("..........");
        cmbboxGelombang.setValue("");
        lblGelombang.setValue("");
        cmbboxGelombang.setDisabled(false);
        txtboxHargaSatuan.setDisabled(false);
        txtboxJumlahFormulir.setDisabled(false);
        isUbah = false;


    }

    public void onReady() {
        loadCmbboxGelombang();
        txtboxHargaSatuan.setValue(0);
        txtboxJumlahFormulir.setValue(0);
        lblTotal.setValue("..........");
        lblGelombang.setValue("");
        cmbboxGelombang.setDisabled(false);
        txtboxHargaSatuan.setDisabled(false);
        txtboxJumlahFormulir.setDisabled(false);
        loadLstboxAnggaranPendapatanUnit();
        load();
    }

    private void loadLstboxAnggaranPendapatanUnit() {
        lstboxAnggaranPendapatanUnit.getItems().clear();
        //List<Map> listMap = rencanaPendapatanUangFormulirMahasiswaBaruDAO
        //	.listDetailByTahunAndKodeUnitKerja(tahunAnggaran, kodeUnit);

        List<Map> listMap = rencanaPendapatanUangFormulirMahasiswaBaruDAO.listDetailByTahun(tahunAnggaran);
        int no = 1;
        DecimalFormat df = new DecimalFormat("#,##0.0#");
        double jumlahAnggaran = 0.0;
        for (final Map m : listMap) {
            Listitem item = new Listitem();
            item.setValue(m);
            item.appendChild(new Listcell("" + no++));
            item.appendChild(new Listcell(ClassAntiNull.AntiNullString(m.get("nm_gelombang"))));
            item.appendChild(new Listcell(ClassAntiNull.AntiNullIntString(m.get("jumlahFormulirYangTerjual"))));
            item.appendChild(new Listcell(ClassAntiNull.AntiNullDoubleString(m.get("harga"))));
            double total = ClassAntiNull.AntiNullDouble(m.get("jumlahFormulirYangTerjual")) * ClassAntiNull.AntiNullDouble(m.get("harga"));
            jumlahAnggaran += total;

            item.appendChild(new Listcell("" + (df.format(total))));

            Box box = new Hbox();
            Toolbarbutton toolbarbtnUbah = new Toolbarbutton();
            toolbarbtnUbah.setLabel("[ubah]");

            toolbarbtnUbah.addEventListener("onClick", new EventListener() {

                @Override
                public void onEvent(Event event) throws Exception {

                    isUbah = true;
                    String nmGelombang = ClassAntiNull.AntiNullString(m.get("nm_gelombang"));
                    int selectedIndex = cmbboxGelombangDataString.indexOf(nmGelombang);
                    cmbboxGelombang.setSelectedIndex(selectedIndex);

                    lblGelombang.setValue(cmbboxGelombangData.get(selectedIndex).getKd_gelombang());

                    int jumlahFormulirTerjual = ClassAntiNull.AntiNullInt(m.get("jumlahFormulirYangTerjual"));
                    double hargaSatuan = ClassAntiNull.AntiNullDouble(m.get("harga"));
                    double total = jumlahFormulirTerjual * hargaSatuan;
                    DecimalFormat df = new DecimalFormat("#,##0.0#");

                    txtboxHargaSatuan.setValue(hargaSatuan);
                    txtboxJumlahFormulir.setValue(jumlahFormulirTerjual);
                    lblTotal.setValue(df.format(total));

                    cmbboxGelombang.setDisabled(false);
                    txtboxHargaSatuan.setDisabled(false);
                    txtboxJumlahFormulir.setDisabled(false);

                }
            });

            Toolbarbutton toolbarbtnHapus = new Toolbarbutton();
            toolbarbtnHapus.setLabel("[hapus]");

            toolbarbtnHapus.addEventListener("onClick", new EventListener() {

                @Override
                public void onEvent(Event event) throws Exception {
                    if (Messagebox.show("Apakah Data  Akan Dihapus: ",
                            "Pesan Konfirmasi", Messagebox.YES | Messagebox.NO, null) == Messagebox.YES) {

                        ///// perubahan 31-10-2009
                        /*
                        int idPosAnggaranPendapatanUnit = ClassAntiNull
                        .AntiNullInt(m
                        .get("idPosAnggaranPendapatanUnit"));
                        String kodeGelombangPMB = ClassAntiNull.AntiNullString(m.get("kodeGelombangPMB"));
                        rencanaPendapatanUangFormulirMahasiswaBaruDAO
                        .deleteByIdPosAnggaranPendapatanUnitAndKodeGelombangPMB(
                        idPosAnggaranPendapatanUnit,


                        kodeGelombangPMB);
                         */

                        String tahun = ClassAntiNull.AntiNullString(m.get("tahun"));
                        String kodeGelombangPMB = ClassAntiNull.AntiNullString(m.get("kodeGelombangPMB"));
                        rencanaPendapatanUangFormulirMahasiswaBaruDAO.deleteByTahunAndKodeGelombangPMB(
                                tahun,
                                kodeGelombangPMB);
                        onReady();
                    }
                }
            });

            box.appendChild(toolbarbtnUbah);
            box.appendChild(toolbarbtnHapus);
            Listcell lbox = new Listcell();
            lbox.appendChild(box);
            item.appendChild(lbox);
            lstboxAnggaranPendapatanUnit.appendChild(item);
            lblTotalAnggaran.setValue(df.format(jumlahAnggaran));
        }
        // TODO Auto-generated method stub

    }

    /****************************
    public void txtboxJumlahFormulirOnChange() {
    try {
    int jumlah = txtboxJumlahFormulir.getValue();
    float harga = new Float(txtboxHargaSatuan.getValue());

    double total = jumlah * harga;
    DecimalFormat df = new DecimalFormat("#,##0.0#");
    lblTotal.setValue(df.format(total));
    } catch (NumberFormatException nfe) {
    try {
    Messagebox.show("Inputan Salah ", "Error",
    Messagebox.OK, null);
    txtboxJumlahFormulir.setFocus(true);
    txtboxJumlahFormulir.setValue(0);
    txtboxHargaSatuan.setValue(0);
    lblTotal.setValue("............");
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    }
    }*/////////////
    public void txtboxJumlahFormulirOnChange() {

        int jumlah = txtboxJumlahFormulir.getValue();
        float harga = new Float(txtboxHargaSatuan.getValue());

        double total = jumlah * harga;
        DecimalFormat df = new DecimalFormat("#,##0.0#");
        lblTotal.setValue(df.format(total));

    }

    public void loadTahunAnggaran() {
        // tahunAnggaran = ClassSession.getInstance().getTahunAkademik();
        //tahunAnggaran = "2009";
        // kodeUnit = ClassSession.getInstance().getKodeGelombang()
        //kodeUnit = "01002000";

        Session sesi = Sessions.getCurrent();
        ClassSession session = (ClassSession) sesi.getAttribute("CURRENT_SESSION");
        lblTahunAnggaran.setValue(session.getThnAnggaran());
        tahunAnggaran = lblTahunAnggaran.getValue();

    }

    public void lstboxAnggaranPendapatanUnitOnSelect() {
        Map m = (Map) lstboxAnggaranPendapatanUnit.getSelectedItem().getValue();
        String nmGelombang = ClassAntiNull.AntiNullString(m.get("nm_gelombang"));
        int selectedIndex = cmbboxGelombangDataString.indexOf(nmGelombang);
        cmbboxGelombang.setSelectedIndex(selectedIndex);

        lblGelombang.setValue(cmbboxGelombangData.get(selectedIndex).getKd_gelombang());

        int jumlahFormulirTerjual = ClassAntiNull.AntiNullInt(m.get("jumlahFormulirYangTerjual"));
        double hargaSatuan = ClassAntiNull.AntiNullDouble(m.get("harga"));
        double total = jumlahFormulirTerjual * hargaSatuan;
        DecimalFormat df = new DecimalFormat("#,##0.0#");

        txtboxHargaSatuan.setValue(hargaSatuan);
        txtboxJumlahFormulir.setValue(jumlahFormulirTerjual);
        lblTotal.setValue(df.format(total));

        cmbboxGelombang.setDisabled(true);
        txtboxHargaSatuan.setDisabled(true);
        txtboxJumlahFormulir.setDisabled(true);

    }
    private List<Gelombang> cmbboxGelombangData;
    private List<String> cmbboxGelombangDataString;

    public void cmbboxGelombangOnChange() {
        int selectedIndex = cmbboxGelombang.getSelectedIndex();
        Gelombang glb = cmbboxGelombangData.get(selectedIndex);
        lblGelombang.setValue(glb.getKd_gelombang());
    }

    public void btnBatalOnClick() {
        onReady();

    }

    public void btnSimpanOnClick() throws Exception {
        int idPosAnggaranPendapatanUnit = posAnggaranPendapatanUnitDAO.getIdFromTahunKodeUnitIdPosPendapatan(tahunAnggaran, kodeUnit,
                8);
        String kodeGelombangPMB = lblGelombang.getValue();
        String tahun = lblTahunAnggaran.getValue();
        /* perubahan 31 -10 -2009
        int jumlah = rencanaPendapatanUangFormulirMahasiswaBaruDAO
        .countByIdPosAnggaranPendapatanUnitAndKodeGelombangPMB(
        idPosAnggaranPendapatanUnit, kodeGelombangPMB);
         */
        int jumlah = rencanaPendapatanUangFormulirMahasiswaBaruDAO.countByTahunAndKodeGelombangPMB(tahun, kodeGelombangPMB);
        if (cmbboxGelombang.getValue().trim().equalsIgnoreCase("")) {
            Messagebox.show("Gelombang tidak boleh kosong", "Pesan Kesalahan", Messagebox.OK, null);
            cmbboxGelombang.setFocus(true);
            return;
        }
        int jumlahFormulir = txtboxJumlahFormulir.getValue();
        float hargaSatuan = new Float(txtboxHargaSatuan.getValue());
        if (jumlahFormulir == 0) {
            Messagebox.show("Jumlah Formulir Tidak Boleh 0", "Pesan Kesalahan", Messagebox.OK, null);
            txtboxJumlahFormulir.setFocus(true);
            return;

        }

        if (hargaSatuan == 0) {
            Messagebox.show("Harga Satuan Tidak Boleh 0", "Pesan Kesalahan", Messagebox.OK, null);
            txtboxHargaSatuan.setFocus(true);
            return;

        }



        RencanaPendapatanUangFormulirMahasiswaBaru rpufmb = new RencanaPendapatanUangFormulirMahasiswaBaru();
//	rpufmb.setIdPosAnggaranPendapatanFormulirPMB(idPosAnggaranPendapatanUnit);
        rpufmb.setTahun(tahun);
        rpufmb.setKodeGelombangPMB(kodeGelombangPMB);
/////perubahan 4 nov 2009
        //     try {
        rpufmb.setJumlahFormulirYangTerjual(txtboxJumlahFormulir.getValue());
        Float hargaFloat = new Float(txtboxHargaSatuan.getValue());
        rpufmb.setHarga(hargaFloat);
//	} catch (NumberFormatException nfe) {
        //    try {
        //	Messagebox.show("Inputan Salah ", "Error",
        //		Messagebox.OK, null);
        //	txtboxJumlahFormulir.setFocus(true);
        //        txtboxJumlahFormulir.setValue(0);
        //        txtboxHargaSatuan.setValue(0);

        //    } catch (InterruptedException e) {
        //	e.printStackTrace();
        //    }
        //}
        if (jumlah > 0) {
            if (!isUbah) {
                if (Messagebox.show("Data Sudah Ada. Apakah Akan Diubah?",
                        "Pesan Konfirmasi", Messagebox.YES | Messagebox.NO, null) == Messagebox.YES) {
                    rencanaPendapatanUangFormulirMahasiswaBaruDAO.updateBaru(rpufmb);

                }
            } else {
                rencanaPendapatanUangFormulirMahasiswaBaruDAO.updateBaru(rpufmb);
            }
            // rencanaPendapatanUangFormulirMahasiswaBaruDAO.update(rpufmb);

        } else {
            //rencanaPendapatanUangFormulirMahasiswaBaruDAO.insert(rpufmb);
            rencanaPendapatanUangFormulirMahasiswaBaruDAO.insertBaru(rpufmb);
        }
        onReady();
    }

    public void loadCmbboxGelombang() {
        try {
            cmbboxGelombangData = gelombangDAO.list();
            cmbboxGelombang.getItems().clear();
            cmbboxGelombangDataString = new ArrayList<String>();
            for (Gelombang gb : cmbboxGelombangData) {
                cmbboxGelombangDataString.add(gb.getNm_gelombang());
                Comboitem item = new Comboitem(gb.getNm_gelombang());
                cmbboxGelombang.appendChild(item);
            }

        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}
